package com.internetCafes.spms.core.generic;

import java.util.List;
import java.util.Map;

/**
 * GenericService的实现类, 其他的自定义 ServiceImpl, 继承自它,可以获得常用的增删查改操作, 未实现的方法有 子类各自实现
 * <p/>
 * Model : 代表数据库中的表 映射的Java对象类型 PK :代表对象的主键类型
 * 
 * @author StarZou
 * @since 2014年6月9日 下午6:14:06
 */
public abstract class GenericServiceImpl<T, PK> implements GenericService<T, PK> {

	/**
	 * 定义成抽象方法,由子类实现,完成dao的注入
	 *
	 * @return GenericDao实现类
	 */
	public abstract GenericDao<T, PK> getDao();

	/**
	 * 插入对象
	 * 
	 * @param t
	 *            对象
	 */
	public int insert(T t) {
		return getDao().insert(t);
	}

	/**
	 * 更新对象
	 * 
	 * @param t
	 *            对象
	 */
	public int update(T t) {
		return getDao().updateByPrimaryKeySelective(t);
	}

	/**
	 * 通过主键, 删除对象
	 * 
	 * @param id
	 *            主键
	 */
	public int delete(PK id) {
		return getDao().deleteByPrimaryKey(id);
	}

	/**
	 * 通过主键, 查询对象
	 * 
	 * @param id
	 *            主键
	 * @return
	 */
	public T selectById(PK id) {
		return getDao().selectByPrimaryKey(id);
	}

	@Override
	public int deleteByPrimaryKey(PK id) {
		return getDao().deleteByPrimaryKey(id);
	}

	@Override
	public T selectByPrimaryKey(PK id) {
		return getDao().selectByPrimaryKey(id);
	}

	@Override
	public int insertBatch(List<T> entityList) {
		return getDao().insertBatch(entityList);
	}

	@Override
	public int updateByPrimaryKeySelective(T entity) {
		return getDao().updateByPrimaryKeySelective(entity);
	}

	@Override
	public int updateByPrimaryKey(T entity) {
		return getDao().updateByPrimaryKey(entity);
	}

	@Override
	public List<T> selectByParams(Map<String, Object> params) {
		return getDao().selectByParams(params);
	}

	@Override
	public long countByParams(Map<String, Object> params) {
		return getDao().countByParams(params);
	}

	@Override
	public int deleteBatchByPrimaryKey(List<PK> ids) {
		return getDao().deleteBatchByPrimaryKey(ids);
	}

	@Override
	public int updateBatch(List<T> entityList) {
		return getDao().updateBatch(entityList);
	}
}
